diff --git a/uefi-tools/atf-build.sh b/uefi-tools/atf-build.sh
index 0c4c09c..65d4dbc 100755
--- a/uefi-tools/atf-build.sh
+++ b/uefi-tools/atf-build.sh
@@ -8,7 +8,6 @@
 # parse-platforms.py and platforms.config.
 #
 
-TOOLS_DIR="`dirname $0`"
 . "$TOOLS_DIR"/common-functions
 OUTPUT_DIR="$PWD"/uefi-build
 
@@ -72,10 +71,10 @@
 	BL30="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $1 get -o scp_bin`"
 	if [ $ATF_BUILDVER -gt 1 ]; then
 		unset SCP_BL2
-		SCP_BL2="$EDK2_DIR/$BL30"
+		SCP_BL2=`search_packages_path "$BL30"`
 	fi
 	BL31="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $1 get -o el3_bin`"
-	BL33="$EDK2_DIR/Build/$PLATFORM_IMAGE_DIR/$BUILD_PROFILE/FV/`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $1 get -o uefi_bin`"
+	BL33="$WORKSPACE/Build/$PLATFORM_IMAGE_DIR/$BUILD_PROFILE/FV/`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $1 get -o uefi_bin`"
 
 	#
 	# Set up cross compilation variables (if applicable)
@@ -86,10 +85,10 @@
 	echo "CROSS_COMPILE=\"$TEMP_CROSS_COMPILE\""
 
 	if [ X"$BL30" != X"" ]; then
-		BL30="${EDK2_DIR}"/"${BL30}"
+		BL30=`search_packages_path "$BL30"`
 	fi
 	if [ X"$BL31" != X"" ]; then
-		BL31="${EDK2_DIR}"/"${BL31}"
+		BL31=`search_packages_path "$BL31"`
 	fi
 
 	#
@@ -102,7 +101,7 @@
 
 		TOS_BIN="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $1 get -o tos_bin`"
 		if [ X"$TOS_BIN" != X"" ]; then
-			BL32=$EDK2_DIR/Build/$PLATFORM_IMAGE_DIR/$BUILD_PROFILE/FV/$TOS_BIN
+			BL32=$WORKSPACE/Build/$PLATFORM_IMAGE_DIR/$BUILD_PROFILE/FV/$TOS_BIN
 		fi
 
 		if [ X"$SPD" != X"" ] && [ X"$BL32" != X"" ]; then
@@ -116,8 +115,26 @@
 			echo "		Please specify both ATF_SPD and TOS_BIN"
 			echo "		if you wish to use a Trusted OS!"
 		fi
+	else
+	#
+	# Since TOS_DIR is not set, user does not want a Trusted OS
+	# even if the source directory and/or binary for it exists.
+	# Next, Check whether user wants secure partition image.
+	# If SPM_BIN is set then include pre-built secure partition image as a
+	# BL32 Image and implicitly set SPM=1.
+	#
+		SPM_BIN="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $1 get -o spm_bin`"
+
+		if [ X"$SPM_BIN" != X"" ]; then
+			BL32=$WORKSPACE/Build/StandaloneSmmPkg/$BUILD_PROFILE/FV/$SPM_BIN
+			PLATFORM_BUILDFLAGS="$PLATFORM_BUILDFLAGS SPM=1"
+		fi
+	# We assume that user does not want secure partition either.
+	# Todo: Revisit if either one of Trusted OS or Secure Partition Image is Mandatory.
 	fi
 
+
+
 	#
 	# Debug extraction handling
 	#
@@ -135,7 +152,7 @@
 	export BL30 BL31 BL32 BL33
 
 	echo "BL30=$BL30"
-	if [ $ATF_BUILDVER -gt 1 ]; then
+	if [ $ATF_BUILDVER -gt 1 ] && [ X"$BL30" != X"" ]; then
 		export SCP_BL2
 		echo "SCP_BL2=$BL30"
 	fi
@@ -165,9 +182,9 @@
 		# Copy resulting images to UEFI image dir
 		#
 		if [ $VERBOSE -eq 1 ]; then
-			echo "Copying bl1.bin and fip.bin to "$EDK2_DIR/Build/$PLATFORM_IMAGE_DIR/$BUILD_PROFILE/FV/""
+			echo "Copying bl1.bin and fip.bin to "$WORKSPACE/Build/$PLATFORM_IMAGE_DIR/$BUILD_PROFILE/FV/""
 		fi
-		cp -a build/"$ATF_PLATFORM/$BUILD_TYPE"/{bl1,fip}.bin "$EDK2_DIR/Build/$PLATFORM_IMAGE_DIR/$BUILD_PROFILE/FV/"
+		cp -a build/"$ATF_PLATFORM/$BUILD_TYPE"/{bl1,fip}.bin "$WORKSPACE/Build/$PLATFORM_IMAGE_DIR/$BUILD_PROFILE/FV/"
 	else
 		return 1
 	fi
diff --git a/uefi-tools/common-functions b/uefi-tools/common-functions
index 08f4fbf..9d01ae1 100644
--- a/uefi-tools/common-functions
+++ b/uefi-tools/common-functions
@@ -4,8 +4,6 @@
 RESULT_PASS_COUNT=0
 RESULT_FAIL_COUNT=0
 
-TOOLS_DIR="`dirname $0`"
-
 function result_log
 {
 	if [ $1 -eq 0 ]; then
@@ -34,6 +32,10 @@
 	        BUILD_ARCH=ARM;;
 	    aarch64*)
 	        BUILD_ARCH=AARCH64;;
+	    i?86*)
+		BUILD_ARCH=IA32;;
+	    x86_64*)
+		BUILD_ARCH=X64;;
 	    *)
 	        BUILD_ARCH=other;;
 	esac
@@ -45,42 +47,168 @@
 
 	echo "Target: $PLATFORM_ARCH"
 	echo "Build: $BUILD_ARCH"
-	if [ "$PLATFORM_ARCH" = "$BUILD_ARCH" ]; then
+ 	if [ "$PLATFORM_ARCH" = "$BUILD_ARCH" ]; then
 	    TEMP_CROSS_COMPILE=
-	elif [ "$PLATFORM_ARCH" == "AARCH64" ]; then
-	    if [ X"$CROSS_COMPILE_64" != X"" ]; then
-	        TEMP_CROSS_COMPILE="$CROSS_COMPILE_64"
-	    else
-	        TEMP_CROSS_COMPILE=aarch64-linux-gnu-
-	    fi
-	elif [ "$PLATFORM_ARCH" == "ARM" ]; then
-	    if [ X"$CROSS_COMPILE_32" != X"" ]; then
-	        TEMP_CROSS_COMPILE="$CROSS_COMPILE_32"
-	    else
-	        TEMP_CROSS_COMPILE=arm-linux-gnueabihf-
-	    fi
 	else
-	    echo "Unsupported target architecture '$PLATFORM_ARCH'!" >&2
+	    case "$PLATFORM_ARCH" in
+		AARCH64)
+                    if [ X"$CROSS_COMPILE_64" != X"" ]; then
+                        TEMP_CROSS_COMPILE="$CROSS_COMPILE_64"
+                    else
+                        TEMP_CROSS_COMPILE=aarch64-linux-gnu-
+                    fi
+                ;;
+		ARM)
+		    TEMP_CROSS_COMPILE=arm-linux-gnueabihf- ;;
+		IA32)
+		    TEMP_CROSS_COMPILE=x86_64-linux-gnu-
+		    for family in 6 5 4 3; do
+		        if i$family86-linux-gnu-as -version >/dev/null 2>&1;then
+		            TEMP_CROSS_COMPILE=i$family86-linux-gnu-
+		            break
+		        fi
+		    done
+		;;
+		X64)
+		    TEMP_CROSS_COMPILE=x86_64-linux-gnu- ;;
+		*)
+	            echo "Unsupported target architecture '$PLATFORM_ARCH'!" >&2
+		;;
+	    esac
 	fi
 }
 
 function get_gcc_version
 {
+	$1 -v >/dev/null 2>&1 || return 1
 	gcc_version=$($1 -dumpversion)
+	MAJVER=`echo $gcc_version | cut -d. -f1`
+
 	case $gcc_version in
-		4.6*|4.7*|4.8*|4.9*)
+		4*)
 			echo GCC$(echo ${gcc_version} | awk -F. '{print $1$2}')
 			;;
 		*)
-			echo "Unknown toolchain version '$gcc_version'" >&2
-			echo "Attempting to build using GCC49 profile." >&2
-			echo GCC49
+			if [ "$MAJVER" -ge 5 ]; then
+			    # We only have a GCC5 build profile for now, so...
+			    # echo GCC$MAJVER
+			    echo GCC5
+			else
+			    echo "Unknown toolchain version '$gcc_version'" >&2
+			    echo "Attempting to build using GCC49 profile." >&2
+			    echo GCC49
+			fi
 			;;
 	esac
+
+	return 0
 }
 
 function get_clang_version
 {
 	clang_version=`$1 --version | head -1 | sed 's/^.*version\s*\([0-9]*\).\([0-9]*\).*/\1\2/g'`
-	echo "CLANG$clang_version"
+	case $clang_version in
+		35*)
+			echo "CLANG$clang_version"
+			;;
+		*)
+			echo "Unknown toolchain version '$clang_version'" >&2
+			echo "Attempting to build using CLANG35 profile." >&2
+			echo CLANG35
+			;;
+	esac
+}
+
+function download_patch_openssl
+{
+    OPENSSL_VER=`ls EDKII_openssl-*.patch | sed 's/^.*-\([0-9.a-z]*\).patch/\1/'`
+    OPENSSL_TAR=openssl-${OPENSSL_VER}.tar.gz
+    OPENSSL_URL=http://www.openssl.org/source/${OPENSSL_TAR}
+    OPENSSL_DIR=openssl-${OPENSSL_VER}
+    OPENSSL_PATCH=EDKII_openssl-${OPENSSL_VER}.patch
+
+    if [ -e "$WORKSPACE"/CryptoPkg/Include/openssl/opensslconf.h ]; then
+        echo "OpenSSL already imported!"
+        return 0
+    fi
+
+    # Use cached copy if available
+    if [ -f "$WORKSPACE"/LinaroPkg/"$OPENSSL_TAR" ]; then
+	tar xzf "$WORKSPACE"/LinaroPkg/"$OPENSSL_TAR"
+    else
+	wget -O - -q ${OPENSSL_URL} | tar xzf -
+    fi
+
+    echo "Importing OpenSSL $OPENSSL_VER"
+    ( cd ${OPENSSL_DIR}; patch -p1 -i ../${OPENSSL_PATCH} )
+    ./Install.sh
+
+    if [ $? -eq 0 ]; then
+	OPENSSL_CONFIGURED=TRUE
+    else
+	echo "OpenSSL $OPENSSL_VER import failed!" >&2
+	rm -rf $OPENSSL_TAR $OPENSSL_DIR
+	return 1
+    fi
+}
+
+function clone_process_openssl
+{
+    if [ -e openssl/include/openssl/opensslconf.h ]; then
+        echo "OpenSSL already imported!"
+        return 0
+    fi
+
+    OPENSSL_VER=`git ls-remote --tags git://github.com/openssl/openssl.git | awk '{print $2;}' | sed 's-^refs/tags/--g' | grep -v '\^{}$' | grep '^OpenSSL' | grep -v '^OpenSSL_FIPS' | tail -1 | sed -n 's/^OpenSSL_\([0-9]*\)_\([0-9]*\)_\([0-9.a-z]*\)$/openssl-\1.\2.\3\n/p'`
+    OPENSSL_TAR="$OPENSSL_VER.tar.gz"
+    if [ -z "$OPENSSL_TAR" ]; then
+        return 1
+    fi
+    OPENSSL_URL=http://www.openssl.org/source/${OPENSSL_TAR}
+    if [ ! -f "$OPENSSL_TAR" ]; then
+        wget -q ${OPENSSL_URL}
+    else
+        rm -rf openssl
+    fi
+    tar xzf "$OPENSSL_TAR"
+    mv "$OPENSSL_VER" openssl
+    # perl process_files.pl # not needed and not currently working
+    return $?
+}
+
+function import_openssl
+{
+    # Don't re-import if already done
+    if [ "$OPENSSL_CONFIGURED" = "TRUE" ]; then
+	echo "Using existing OpenSSL $OPENSSL_VER"
+	return 0
+    fi
+
+    cd CryptoPkg/Library/OpensslLib/
+    if [ -f EDKII_openssl-*.patch ]; then
+        download_patch_openssl
+    else
+        clone_process_openssl
+    fi
+    RET=$?
+    cd - >/dev/null
+    return $RET
+}
+
+function search_packages_path
+{
+    file="$1"
+
+    IFS=:
+    for dir in $PACKAGES_PATH; do
+	if [ -e "$dir/$file" ]; then
+	    echo "$dir/$file"
+	    unset IFS
+	    return 0
+	fi
+    done
+
+    echo "$file not found in any directory on PACKAGES_PATH!" >&2
+    unset IFS
+    return 1
 }
diff --git a/uefi-tools/edk2-build.sh b/uefi-tools/edk2-build.sh
new file mode 100755
index 0000000..3e218b3
--- /dev/null
+++ b/uefi-tools/edk2-build.sh
@@ -0,0 +1,401 @@
+#!/bin/bash
+
+#
+# edk2-build.sh: evolution of uefi-build.sh for edk2-platforms
+#
+
+unset MAKEFLAGS  # BaseTools not safe to build parallel, prevent env overrides
+
+TOOLS_DIR="`dirname $0`"
+TOOLS_DIR="`readlink -f \"$TOOLS_DIR\"`"
+export TOOLS_DIR
+. "$TOOLS_DIR"/common-functions
+PLATFORM_CONFIG="-c $TOOLS_DIR/edk2-platforms.config"
+ARCH=
+VERBOSE=0                  # Override with -v
+ATF_DIR=
+TOS_DIR=
+TOOLCHAIN="gcc"            # Override with -T
+WORKSPACE=
+EDK2_DIR=
+PLATFORMS_DIR=
+NON_OSI_DIR=
+IMPORT_OPENSSL=TRUE
+OPENSSL_CONFIGURED=FALSE
+
+# Number of threads to use for build
+export NUM_THREADS=$((`getconf _NPROCESSORS_ONLN` + `getconf _NPROCESSORS_ONLN`))
+
+function do_build
+{
+	PLATFORM_ARCH=`echo $board | cut -s -d: -f2`
+	if [ -n "$PLATFORM_ARCH" ]; then
+		board=`echo $board | cut -d: -f1`
+	else
+		PLATFORM_ARCH="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $board get -o arch`"
+	fi
+	PLATFORM_NAME="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $board get -o longname` ($PLATFORM_ARCH)"
+	if [ -z "$PLATFORM_ARCH" ]; then
+		echo "Unknown target architecture - aborting!" >&2
+		return 1
+	fi
+	PLATFORM_PREBUILD_CMDS="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $board get -o prebuild_cmds`"
+	PLATFORM_BUILDFLAGS="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $board get -o buildflags`"
+	PLATFORM_BUILDFLAGS="$PLATFORM_BUILDFLAGS ${EXTRA_OPTIONS[@]}"
+	PLATFORM_BUILDCMD="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $board get -o buildcmd`"
+	PLATFORM_DSC="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $board get -o dsc`"
+	PLATFORM_PACKAGES_PATH=""
+	COMPONENT_INF="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $board get -o inf`"
+
+	TEMP_PACKAGES_PATH="$GLOBAL_PACKAGES_PATH:`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $board get -o packages_path`"
+	IFS=:
+	for path in "$TEMP_PACKAGES_PATH"; do
+		case "$path" in
+			/*)
+				PLATFORM_PACKAGES_PATH="$PLATFORM_PACKAGES_PATH:$path"
+			;;
+			*)
+				PLATFORM_PACKAGES_PATH="$PLATFORM_PACKAGES_PATH:$PWD/$path"
+			;;
+	        esac
+	done
+	unset IFS
+
+	if [ $VERBOSE -eq 1 ]; then
+		echo "Setting build parallellism to $NUM_THREADS processes"
+		echo "PLATFORM_NAME=$PLATFORM_NAME"
+		echo "PLATFORM_PREBUILD_CMDS=$PLATFORM_PREBUILD_CMDS"
+		echo "PLATFORM_BUILDFLAGS=$PLATFORM_BUILDFLAGS"
+		echo "PLATFORM_BUILDCMD=$PLATFORM_BUILDCMD"
+		echo "PLATFORM_DSC=$PLATFORM_DSC"
+		echo "PLATFORM_ARCH=$PLATFORM_ARCH"
+		echo "PLATFORM_PACKAGES_PATH=$PLATFORM_PACKAGES_PATH"
+	fi
+
+	set_cross_compile
+	CROSS_COMPILE="$TEMP_CROSS_COMPILE"
+
+	echo "Building $PLATFORM_NAME - $PLATFORM_ARCH"
+	echo "CROSS_COMPILE=\"$TEMP_CROSS_COMPILE\""
+	echo "$board"_BUILDFLAGS="'$PLATFORM_BUILDFLAGS'"
+
+	if [ "$TARGETS" == "" ]; then
+		TARGETS=( RELEASE )
+	fi
+
+	case $TOOLCHAIN in
+		"gcc")
+			PLATFORM_TOOLCHAIN=`get_gcc_version "$CROSS_COMPILE"gcc`
+			;;
+		"clang")
+			PLATFORM_TOOLCHAIN=`get_clang_version clang`
+			;;
+		*)
+			# Use command-line specified profile directly
+			PLATFORM_TOOLCHAIN=$TOOLCHAIN
+			;;
+	esac
+	echo "PLATFORM_TOOLCHAIN is ${PLATFORM_TOOLCHAIN}"
+
+	export ${PLATFORM_TOOLCHAIN}_${PLATFORM_ARCH}_PREFIX=$CROSS_COMPILE
+	echo "Toolchain prefix: ${PLATFORM_TOOLCHAIN}_${PLATFORM_ARCH}_PREFIX=$CROSS_COMPILE"
+
+	export PACKAGES_PATH="$PLATFORM_PACKAGES_PATH"
+	for target in "${TARGETS[@]}" ; do
+		if [ X"$PLATFORM_PREBUILD_CMDS" != X"" ]; then
+			echo "Run pre-build commands:"
+			if [ $VERBOSE -eq 1 ]; then
+				echo "  ${PLATFORM_PREBUILD_CMDS}"
+			fi
+			eval ${PLATFORM_PREBUILD_CMDS}
+		fi
+
+		if [ -n "$COMPONENT_INF" ]; then
+			# Build a standalone component
+			if [ $VERBOSE -eq 1 ]; then
+				echo "build -n $NUM_THREADS -a \"$PLATFORM_ARCH\" -t ${PLATFORM_TOOLCHAIN} -p \"$PLATFORM_DSC\"" \
+					"-m \"$COMPONENT_INF\" -b "$target" ${PLATFORM_BUILDFLAGS}"
+			fi
+			build -n $NUM_THREADS -a "$PLATFORM_ARCH" -t ${PLATFORM_TOOLCHAIN} -p "$PLATFORM_DSC" \
+				-m "$COMPONENT_INF" -b "$target" ${PLATFORM_BUILDFLAGS}
+		else
+			# Build a platform
+			if [ $VERBOSE -eq 1 ]; then
+				echo "build -n $NUM_THREADS -a \"$PLATFORM_ARCH\" -t ${PLATFORM_TOOLCHAIN} -p \"$PLATFORM_DSC\"" \
+					"-b "$target" ${PLATFORM_BUILDFLAGS}"
+			fi
+			build -n $NUM_THREADS -a "$PLATFORM_ARCH" -t ${PLATFORM_TOOLCHAIN} -p "$PLATFORM_DSC" \
+				-b "$target" ${PLATFORM_BUILDFLAGS}
+		fi
+
+		RESULT=$?
+		if [ $RESULT -eq 0 ]; then
+			if [ X"$TOS_DIR" != X"" ]; then
+				pushd $TOS_DIR >/dev/null
+				if [ $VERBOSE -eq 1 ]; then
+					echo "$TOOLS_DIR/tos-build.sh -e "$EDK2_DIR" -t "$target"_${PLATFORM_TOOLCHAIN} $board"
+				fi
+				$TOOLS_DIR/tos-build.sh -e "$EDK2_DIR" -t "$target"_${PLATFORM_TOOLCHAIN} $board
+				RESULT=$?
+				popd >/dev/null
+			fi
+		fi
+		if [ $RESULT -eq 0 ]; then
+			if [ X"$ATF_DIR" != X"" ]; then
+				pushd $ATF_DIR >/dev/null
+				if [ $VERBOSE -eq 1 ]; then
+					echo "$TOOLS_DIR/atf-build.sh -e "$EDK2_DIR" -t "$target"_${PLATFORM_TOOLCHAIN} $board"
+				fi
+				$TOOLS_DIR/atf-build.sh -e "$EDK2_DIR" -t "$target"_${PLATFORM_TOOLCHAIN} $board
+				RESULT=$?
+				popd >/dev/null
+			fi
+		fi
+		result_log $RESULT "$PLATFORM_NAME $target"
+	done
+	unset PACKAGES_PATH
+}
+
+
+function configure_paths
+{
+	WORKSPACE="$PWD"
+
+	# Check to see if we are in a UEFI repository
+	# refuse to continue if we aren't
+	if [ ! -d "$EDK2_DIR"/BaseTools ]
+	then
+		if [ -d "$PWD"/edk2/BaseTools ]; then
+			EDK2_DIR="$PWD"/edk2
+		else
+			echo "ERROR: can't locate the edk2 directory" >&2
+			echo "       please specify -e/--edk2-dir" >&2
+			exit 1
+		fi
+	fi
+
+	GLOBAL_PACKAGES_PATH="$EDK2_DIR"
+
+	# locate edk2-platforms
+	if [ -z "$PLATFORMS_DIR" -a -d "$PWD"/edk2-platforms ]; then
+		PLATFORMS_DIR="$PWD"/edk2-platforms
+	fi
+	if [ -n "$PLATFORMS_DIR" ]; then
+		GLOBAL_PACKAGES_PATH="$GLOBAL_PACKAGES_PATH:$PLATFORMS_DIR"
+	fi
+
+	# locate edk2-non-osi
+	if [ -z "$NON_OSI_DIR" -a -d "$PWD"/edk2-non-osi ]; then
+		NON_OSI_DIR="$PWD"/edk2-non-osi
+	fi
+	if [ -n "$NON_OSI_DIR" ]; then
+		GLOBAL_PACKAGES_PATH="$GLOBAL_PACKAGES_PATH:$NON_OSI_DIR"
+	fi
+
+	# locate arm-trusted-firmware
+	if [ -z "$ATF_DIR" -a -d "$PWD"/arm-trusted-firmware ]; then
+		ATF_DIR="$PWD"/arm-trusted-firmware
+	fi
+
+	export WORKSPACE
+}
+
+
+function prepare_build
+{
+	get_build_arch
+	export ARCH=$BUILD_ARCH
+
+	export ARCH
+	cd $EDK2_DIR
+	PACKAGES_PATH=$GLOBAL_PACKAGES_PATH . edksetup.sh --reconfig
+	if [ $? -ne 0 ]; then
+		echo "Sourcing edksetup.sh failed!" >&2
+		exit 1
+	fi
+	if [ $VERBOSE -eq 1 ]; then
+		echo "Building BaseTools"
+	fi
+	make -C BaseTools
+	RET=$?
+	cd -
+	if [ $RET -ne 0 ]; then
+		echo " !!! BaseTools failed to build !!! " >&2
+		exit 1
+	fi
+
+	if [ "$IMPORT_OPENSSL" = "TRUE" ]; then
+		cd $EDK2_DIR
+		import_openssl
+		if [ $? -ne 0 ]; then
+			echo "Importing OpenSSL failed - aborting!" >&2
+			echo "  specify --no-openssl to attempt build anyway." >&2
+			exit 1
+		fi
+		cd $WORKSPACE
+	fi
+}
+
+
+function usage
+{
+	echo "usage:"
+	echo -n "uefi-build.sh [-b DEBUG | RELEASE] [ all "
+	for board in "${boards[@]}" ; do
+	    echo -n "| $board "
+	done
+	echo "]"
+	printf "%8s\tbuild %s\n" "all" "all supported platforms"
+	for board in "${boards[@]}" ; do
+		PLATFORM_NAME="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $board get -o longname`"
+		printf "%8s\tbuild %s\n" "$board" "${PLATFORM_NAME}"
+	done
+}
+
+#
+# Since we do a command line validation on whether specified platforms exist or
+# not, do a first pass of command line to see if there is an explicit config
+# file there to read valid platforms from.
+#
+commandline=( "$@" )
+i=0
+for arg;
+do
+	if [ $arg == "-c" ]; then
+		FILE_ARG=${commandline[i + 1]}
+		if [ ! -f "$FILE_ARG" ]; then
+			echo "ERROR: configuration file '$FILE_ARG' not found" >&2
+			exit 1
+		fi
+		case "$FILE_ARG" in
+			/*)
+				PLATFORM_CONFIG="-c $FILE_ARG"
+			;;
+			*)
+				PLATFORM_CONFIG="-c `readlink -f \"$FILE_ARG\"`"
+			;;
+		esac
+		echo "Platform config file: '$FILE_ARG'"
+	fi
+	i=$(($i + 1))
+done
+
+export PLATFORM_CONFIG
+
+builds=()
+boards=()
+boardlist="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG shortlist`"
+for board in $boardlist; do
+    boards=(${boards[@]} $board)
+done
+
+NUM_TARGETS=0
+
+while [ "$1" != "" ]; do
+	case $1 in
+		-1)     # Disable build parallellism
+			NUM_THREADS=1
+			;;
+		-a | --arm-tf-dir)
+			shift
+			ATF_DIR="`readlink -f $1`"
+			;;
+		-c)     # Already parsed above - skip this + option
+			shift
+			;;
+		-b | --build-target)
+			shift
+			echo "Adding Build target: $1"
+			TARGETS=(${TARGETS[@]} $1)
+			;;
+		-D)     # Pass through as -D option to 'build'
+			shift
+			echo "Adding Macro: -D $1"
+			EXTRA_OPTIONS=(${EXTRA_OPTIONS[@]} "-D" $1)
+			;;
+		-e | --edk2-dir)
+			shift
+			export EDK2_DIR="`readlink -f $1`"
+			;;
+		-h | --help)
+			usage
+			exit
+			;;
+		--no-openssl)
+			IMPORT_OPENSSL=FALSE
+			;;
+		-n | --non-osi-dir)
+			shift
+			NON_OSI_DIR="`readlink -f $1`"
+			;;
+		-p | --platforms-dir)
+			shift
+			PLATFORMS_DIR="`readlink -f $1`"
+			;;
+		-s | --tos-dir)
+			shift
+			export TOS_DIR="`readlink -f $1`"
+			;;
+		-T)     # Set specific toolchain tag, or clang/gcc for autoselection
+			shift
+			echo "Setting toolchain tag to '$1'"
+			TOOLCHAIN="$1"
+			;;
+		-v)
+			VERBOSE=1
+			;;
+		all)    # Add all targets in configuration file to list
+			builds=(${boards[@]})
+			NUM_TARGETS=$(($NUM_TARGETS + 1))
+			;;
+		*)      # Try to match target in configuration file, add to list
+			MATCH=0
+			for board in "${boards[@]}" ; do
+				if [ "`echo $1 | cut -d: -f1`" == $board ]; then
+					MATCH=1
+					builds=(${builds[@]} "$1")
+					break
+				fi
+			done
+
+			if [ $MATCH -eq 0 ]; then
+				echo "unknown arg $1"
+				usage
+				exit 1
+			fi
+			NUM_TARGETS=$(($NUM_TARGETS + 1))
+			;;
+	esac
+	shift
+done
+
+if [ $NUM_TARGETS -le  0 ]; then
+	echo "No targets specified - exiting!" >&2
+	exit 0
+fi
+
+export VERBOSE
+
+configure_paths
+
+prepare_build
+
+if [[ "${EXTRA_OPTIONS[@]}" != *"FIRMWARE_VER"* ]]; then
+	if test -d .git && head=`git rev-parse --verify --short HEAD 2>/dev/null`; then
+		FIRMWARE_VER=`git rev-parse --short HEAD`
+		if ! git diff-index --quiet HEAD --; then
+			FIRMWARE_VER="${FIRMWARE_VER}-dirty"
+		fi
+		EXTRA_OPTIONS=( ${EXTRA_OPTIONS[@]} "-D" FIRMWARE_VER=$FIRMWARE_VER )
+		if [ $VERBOSE -eq 1 ]; then
+			echo "FIRMWARE_VER=$FIRMWARE_VER"
+			echo "EXTRA_OPTIONS=$EXTRA_OPTIONS"
+		fi
+	fi
+fi
+
+for board in "${builds[@]}" ; do
+	do_build
+done
+
+result_print
diff --git a/uefi-tools/edk2-platforms.config b/uefi-tools/edk2-platforms.config
new file mode 100644
index 0000000..be74327
--- /dev/null
+++ b/uefi-tools/edk2-platforms.config
@@ -0,0 +1,138 @@
+# Platform build configurations for Linaro EDK2 builds
+# ====================================================
+# The configuration file format is extremely simplistic:
+# - Each platform has a short name.
+# - A platform entry starts by the short name held in square brackets, '[]'
+# - Within each entry, all options are described in a NAME=VALUE scheme,
+#   with the name being whatever comes before the first '=' on the line,
+#   and the value being everything that comes after it.
+#
+# Mandatory options:
+# - LONGNAME		A more descriptive name of the platform.
+# - DSC			Pointer to the EDK2 build description file. (The
+#			pandaboard is excused, all other ports must have this.)
+# - ARCH		String describing the architecture to build for.
+#			Currently supported are AARCH32 and AARCH64.
+# - UEFI_BIN		Name of executable image produced.
+# - UEFI_IMAGE_DIR	Build output directory name, relative to 'Build'.
+#
+# Options for Trusted OS
+# Note that OP-TEE (https://github.com/OP-TEE/optee_os) is the only currently
+# supported Trusted OS
+# - BUILD_TOS		Set to "yes" if the build should automatically build
+#   			Trusted OS, mainly for ARM Trusted Firmware.
+#			If this is set, you must also set ATF_SPD!
+#			Else we will not know which specific Trusted OS to
+#			build.
+#			Set to "debug" to create a debug build.
+# - TOS_PLATFORM	Platform name for Trusted OS build, if
+#   			different from ARM Trusted Firmware platform
+#			or UEFI platform name.
+# - TOS_PLATFORM_FLAVOR	If a core platform has multiple flavors, specify which
+#			flavor here.
+#
+# Options for ARM Trusted Firmware platforms
+# - BUILD_ATF		Set to "yes" if the build should automatically build
+#   			ARM Trusted Firmware and a fip containing UEFI image.
+#			Set to "debug" to create a debug build.
+# - ATF_PLATFORM	Platform name for ARM Trusted Firmware build, if
+#   			different from UEFI platform name.
+# - SCP_BIN		SCP image to pass to ARM Trusted Firmware.
+# - TOS_BIN		Trusted OS image to pass to ARM Trusted Firmware.
+#			The path is relative to
+#			$EDK2_DIR/Build/$PLATFORM_IMAGE_DIR/$BUILD_PROFILE/FV/.
+#			To actually build the Trusted OS, you must also set
+#			ATF_SPD.
+# - ATF_SPD		Name of Secure Payload Dispatcher
+#			To actually build the Trusted OS, you must also set
+#			TOS_BIN.
+#
+# Optional options:
+# - BUILDFLAGS		Any special flags you want to pass to the build command.
+# - ATF_BUILDFLAGS	Any special flags you want to pass to the ARM Trusted
+#			Firmware build command.
+# - TOS_BUILDFLAGS	Any special flags you want to pass to the Trusted OS
+#			build command.
+# - EXTRA_FILES		Any additional files to be copied to output dir.
+# - PREBUILD_CMDS	Any commands you want to execute before the build step.
+# - POSTBUILD_CMDS	Any commands you want to execute after the build step.
+# - PACKAGES_PATH	Additional directories to search for packages under.
+# - INF                 Point to a .inf (in addition to a .dsc) in order to
+#                       build a single component (standalone driver/app).
+#
+
+[juno]
+LONGNAME=aarch64 Juno
+DSC=Platform/ARM/JunoPkg/ArmJuno.dsc
+BUILDFLAGS=
+ARCH=AARCH64
+BUILD_ATF=yes
+SCP_BIN=Platform/ARM/Juno/bl30.bin
+UEFI_BIN=BL33_AP_UEFI.fd
+UEFI_IMAGE_DIR=ArmJuno
+
+# ARM FVP BASE AEMv8-A model
+[fvp]
+LONGNAME=aarch64 FVP RTSM
+DSC=Platform/ARM/VExpressPkg/ArmVExpress-FVP-AArch64.dsc
+BUILDFLAGS=-D EDK2_ENABLE_SMSC_91X=1 -D EDK2_ENABLE_PL111=1
+ARCH=AARCH64
+BUILD_ATF=yes
+UEFI_BIN=FVP_AARCH64_EFI.fd
+UEFI_IMAGE_DIR=ArmVExpress-FVP-AArch64
+
+[tc2]
+LONGNAME=Versatile Express TC2
+BUILDFLAGS=-D ARM_BIGLITTLE_TC2=1
+DSC=Platform/ARM/VExpressPkg/ArmVExpress-CTA15-A7.dsc
+ARCH=ARM
+
+[overdrive]
+LONGNAME=AMD Overdrive
+DSC=Platform/AMD/OverdriveBoard/OverdriveBoard.dsc
+ARCH=AARCH64
+
+[overdrive1000]
+LONGNAME=SoftIron Overdrive 1000
+DSC=Platform/SoftIron/Overdrive1000Board/Overdrive1000Board.dsc
+ARCH=AARCH64
+
+[cello]
+LONGNAME=LeMaker Cello
+DSC=Platform/LeMaker/CelloBoard/CelloBoard.dsc
+ARCH=AARCH64
+
+[hikey]
+LONGNAME=HiKey
+DSC=Platform/Hisilicon/HiKey/HiKey.dsc
+ARCH=AARCH64
+
+[d02]
+LONGNAME=Hisilicon D02
+DSC=Platform/Hisilicon/D02/Pv660D02.dsc
+ARCH=AARCH64
+
+[d03]
+LONGNAME=Hisilicon D03
+DSC=Platform/Hisilicon/D03/D03.dsc
+ARCH=AARCH64
+
+[d05]
+LONGNAME=HiSilicon D05
+DSC=Platform/Hisilicon/D05/D05.dsc
+ARCH=AARCH64
+
+[armada70x0]
+LONGNAME=Marvell Armada 70x0
+DSC=Platform/Marvell/Armada/Armada70x0.dsc
+ARCH=AARCH64
+
+[chaoskey]
+LONGNAME=Altus Metrum ChaosKey RNG
+DSC=Silicon/Openmoko/Openmoko.dsc
+ARCH=AARCH64
+
+[beagle]
+LONGNAME=Beagleboard (original)
+DSC=BeagleBoardPkg/BeagleBoardPkg.dsc
+ARCH=ARM
diff --git a/uefi-tools/edk2-to-git-am.sh b/uefi-tools/edk2-to-git-am.sh
new file mode 100755
index 0000000..d3f8a27
--- /dev/null
+++ b/uefi-tools/edk2-to-git-am.sh
@@ -0,0 +1,20 @@
+#!/bin/sh
+#
+# Convert one or more git patches that have had it's CR:s stripped out by SMTP
+# into something th
+
+if [ $# -lt 1 ]; then
+  echo "usage: `basename $0` <filename>" >&2
+  exit 1
+fi
+
+convert_file()
+{
+  sed -i "s/$/\r/g" "$1"
+  sed -i "s:^\(---\|+++ \)\(.*\)\r$:\1\2:g" "$1"
+}
+
+while [ $# -gt 0 ]; do
+  convert_file "$1"
+  shift
+done
diff --git a/uefi-tools/handy-snippets.sh b/uefi-tools/handy-snippets.sh
new file mode 100644
index 0000000..834ca74
--- /dev/null
+++ b/uefi-tools/handy-snippets.sh
@@ -0,0 +1,8 @@
+#
+# First step in looking for duplicate file GUIDs
+#
+# find . -name "*.inf" | \
+#   xargs grep -H FILE_GUID | \
+#   sed 's/^\(.*\):[ \t]*FILE_GUID[ \t]*=[ \t]*\([a-f.A-F.0-9.-]*\).*\r$/\2 \1/' | \
+#   sort
+#
diff --git a/uefi-tools/opteed-build.sh b/uefi-tools/opteed-build.sh
index 3c759eb..702860e 100755
--- a/uefi-tools/opteed-build.sh
+++ b/uefi-tools/opteed-build.sh
@@ -7,7 +7,6 @@
 # parse-platforms.py and platforms.config.
 #
 
-TOOLS_DIR="`dirname $0`"
 . "$TOOLS_DIR"/common-functions
 
 export CFG_TEE_CORE_LOG_LEVEL=2  # 0=none 1=err 2=info 3=debug 4=flow
@@ -100,10 +99,11 @@
 		#
 		# Copy resulting images to UEFI image dir
 		#
+		TOS_BIN="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $1 get -o tos_bin`"
 		if [ $VERBOSE -eq 1 ]; then
-			echo "Copying tee.bin to "$EDK2_DIR/Build/$PLATFORM_IMAGE_DIR/$BUILD_PROFILE/FV/""
+			echo "Copying '$TOS_BIN' to '$EDK2_DIR/Build/$PLATFORM_IMAGE_DIR/$BUILD_PROFILE/FV/'"
 		fi
-		cp -a out/arm-plat-"$TOS_PLATFORM"/core/tee.bin "$EDK2_DIR/Build/$PLATFORM_IMAGE_DIR/$BUILD_PROFILE/FV/"
+		cp -a out/arm-plat-"$TOS_PLATFORM"/core/"$TOS_BIN" "$EDK2_DIR/Build/$PLATFORM_IMAGE_DIR/$BUILD_PROFILE/FV/"
 	else
 		return 1
 	fi
diff --git a/uefi-tools/parse-platforms.py b/uefi-tools/parse-platforms.py
index 5aa4283..af44038 100755
--- a/uefi-tools/parse-platforms.py
+++ b/uefi-tools/parse-platforms.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/python
 
 import sys, os, argparse, ConfigParser
 
diff --git a/uefi-tools/platforms.config b/uefi-tools/platforms.config
index adaf6c0..deb02f4 100644
--- a/uefi-tools/platforms.config
+++ b/uefi-tools/platforms.config
@@ -46,6 +46,9 @@
 # - ATF_SPD		Name of Secure Payload Dispatcher
 #			To actually build the Trusted OS, you must also set
 #			TOS_BIN.
+# - SPM_BIN		Prebuilt Secure Partition image to pass to ARM Trusted Firmware.
+#			The path is relative to
+#			$EDK2_DIR/Build/StandaloneSmmPkg/$BUILD_PROFILE/FV/.
 #
 # Optional options:
 # - BUILDFLAGS		Any special flags you want to pass to the build command.
@@ -57,10 +60,8 @@
 # - PREBUILD_CMDS	Any commands you want to execute before the build step.
 # - POSTBUILD_CMDS	Any commands you want to execute after the build step.
 # - PACKAGES_PATH	Additional directories to search for packages under.
-#
-# Special options:
-# - BUILDCMD		Command to call instead of the normal build command.
-#			Only for pandaboard, not to be used for new ports.
+# - INF                 Point to a .inf (in addition to a .dsc) in order to
+#                       build a single component (standalone driver/app).
 #
 
 [juno]
@@ -92,6 +93,26 @@
 UEFI_BIN=FVP_AARCH64_EFI.fd
 UEFI_IMAGE_DIR=ArmVExpress-FVP-AArch64
 
+# ARM FVP BASE AEMv8-A model
+[fvp_mm_standalone]
+LONGNAME=FVP Base for MM Standalone image in secure world
+DSC=StandaloneSmmPkg/StandaloneSmmPkg.dsc
+ARCH=AARCH64
+UEFI_BIN=FVP_AARCH64_EFI_MM_STANDALONE.fd
+UEFI_IMAGE_DIR=ArmVExpress-FVP-AArch64-MM-Standalone
+
+[fvp_mm_normal]
+LONGNAME=FVP Base for UEFI image with MM support in normal world
+DSC=OpenPlatformPkg/Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.dsc
+BUILDFLAGS=-D EDK2_OUT_DIR=Build/ArmVExpress-FVP-AArch64-MM-Normal -D ARM_STANDALONE_MM_ENABLE=TRUE
+ARCH=AARCH64
+BUILD_ATF=debug
+UEFI_BIN=FVP_AARCH64_EFI.fd
+UEFI_IMAGE_DIR=ArmVExpress-FVP-AArch64-MM-Normal
+ATF_PLATFORM=fvp
+SPM_BIN=STANDALONESMM.fd
+ATF_BUILDFLAGS=ARM_BL31_IN_DRAM=1
+
 [tc2]
 LONGNAME=Versatile Express TC2
 BUILDFLAGS=-D ARM_BIGLITTLE_TC2=1
@@ -100,14 +121,6 @@
 UEFI_BIN=ARM_VEXPRESS_CTA15A7_EFI.fd
 UEFI_IMAGE_DIR=ArmVExpress-CTA15-A7
 
-[panda]
-LONGNAME=TI Pandaboard
-BUILDCMD=./PandaBoardPkg/build.sh
-BUILDFLAGS=
-ARCH=ARM
-UEFI_BIN=MLO
-UEFI_IMAGE_DIR=PandaBoard
-
 [beagle]
 LONGNAME=BeagleBoard
 BUILDFLAGS=
@@ -130,14 +143,6 @@
 UEFI_BIN=D01.fd
 UEFI_IMAGE_DIR=D01
 
-[bbb]
-LONGNAME=Texas Instruments BeagleBone Black
-BUILDFLAGS=
-DSC=TexasInstrumentsPkg/BeagleBoneBlackPkg/BeagleBoneBlackPkg.dsc
-ARCH=ARM
-UEFI_BIN=BEAGLEBONEBLACK_EFI.fd
-UEFI_IMAGE_DIR=BeagleBoneBlack
-
 [qemu]
 LONGNAME=QEMU ARM Emulator
 BUILDFLAGS=-D INTEL_BDS
@@ -171,6 +176,15 @@
 UEFI_BIN=STYX_ROM.fd
 UEFI_IMAGE_DIR=Overdrive
 
+[overdrive1000]
+LONGNAME=SoftIron Overdrive 1000
+BUILDFLAGS=-D INTEL_BDS
+DSC=OpenPlatformPkg/Platforms/AMD/Styx/Overdrive1000Board/Overdrive1000Board.dsc
+ARCH=AARCH64
+PACKAGES_PATH=OpenPlatformPkg/Platforms/AMD/Styx/Binary
+UEFI_BIN=OVERDRIVE1000_ROM.fd
+UEFI_IMAGE_DIR=Overdrive1000Board
+
 [cello]
 LONGNAME=LeMaker Cello
 BUILDFLAGS=-D INTEL_BDS
@@ -180,6 +194,9 @@
 UEFI_BIN=STYX_ROM.fd
 UEFI_IMAGE_DIR=Cello
 
+# NOTE: If using upstream ATF, i.e.
+# https://github.com/ARM-software/arm-trusted-firmware
+# please set TOS_BIN=tee-pager.bin
 [hikey]
 LONGNAME=CircuitCo HiKey
 DSC=OpenPlatformPkg/Platforms/Hisilicon/HiKey/HiKey.dsc
@@ -189,6 +206,7 @@
 BUILD_ATF=yes
 ATF_SPD=opteed
 TOS_BIN=tee.bin
+TOS_PLATFORM_FLAVOR=hikey
 BUILD_TOS=yes
 SCP_BIN=OpenPlatformPkg/Platforms/Hisilicon/HiKey/Binary/mcuimage.bin
 # Uncomment this to use UART0 as the EDK2 console
@@ -198,13 +216,29 @@
 # Uncomment this to use UART0 as the OP-TEE Trusted OS console
 #TOS_BUILDFLAGS=CFG_CONSOLE_UART=0
 
+[hikey960]
+LONGNAME=Hikey960
+DSC=OpenPlatformPkg/Platforms/Hisilicon/HiKey960/HiKey960.dsc
+ARCH=AARCH64
+UEFI_BIN=BL33_AP_UEFI.fd
+UEFI_IMAGE_DIR=HiKey960
+BUILD_ATF=yes
+ATF_SPD=opteed
+TOS_BIN=tee-pager.bin
+TOS_PLATFORM=hikey
+TOS_PLATFORM_FLAVOR=hikey960
+BUILD_TOS=yes
+SCP_BIN=OpenPlatformPkg/Platforms/Hisilicon/HiKey960/Binary/lpm3.img
+# Uncomment this to use UART5 as the EDK2 console for v1 hardware
+#BUILDFLAGS=-DSERIAL_BASE=0xFDF05000
+
 [xen64]
 LONGNAME=AArch64 Xen guest
 BUILDFLAGS=
-DSC=ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationXen.dsc
+DSC=ArmVirtPkg/ArmVirtXen.dsc
 ARCH=AARCH64
 UEFI_BIN=XEN_EFI.fd
-UEFI_IMAGE_DIR=ArmVirtualizationXen-AARCH64
+UEFI_IMAGE_DIR=ArmVirtXen-AARCH64
 
 [aarch64-shell]
 LONGNAME=AArch64 EFI Shell
@@ -243,3 +277,30 @@
 ARCH=AARCH64
 UEFI_BIN=D03.fd
 UEFI_IMAGE_DIR=D03
+
+[d05]
+LONGNAME=HiSilicon D05
+DSC=OpenPlatformPkg/Platforms/Hisilicon/D05/D05.dsc
+ARCH=AARCH64
+UEFI_BIN=D05.fd
+UEFI_IMAGE_DIR=D05
+
+[armada70x0]
+LONGNAME=Marvell Armada 70x0
+DSC=OpenPlatformPkg/Platforms/Marvell/Armada/Armada70x0.dsc
+ARCH=AARCH64
+
+[ovmfx64]
+LONGNAME=OVMF Qemu X64
+DSC=OvmfPkg/OvmfPkgX64.dsc
+ARCH=X64
+
+[hello]
+LONGNAME=EDK2 Hello World Example
+DSC=MdeModulePkg/MdeModulePkg.dsc
+INF=MdeModulePkg/Application/HelloWorld/HelloWorld.inf
+
+[chaoskey]
+LONGNAME=Altus Metrum ChaosKey Driver
+DSC=OptionRomPkg/OptionRomPkg.dsc
+INF=OpenPlatformPkg/Drivers/Usb/Misc/ChaosKeyDxe/ChaosKeyDxe.inf
diff --git a/uefi-tools/tos-build.sh b/uefi-tools/tos-build.sh
index 9dc4b2d..a3bf421 100755
--- a/uefi-tools/tos-build.sh
+++ b/uefi-tools/tos-build.sh
@@ -8,7 +8,6 @@
 # parse-platforms.py and platforms.config.
 #
 
-TOOLS_DIR="`dirname $0`"
 . "$TOOLS_DIR"/common-functions
 
 function usage
diff --git a/uefi-tools/uefi-build.sh b/uefi-tools/uefi-build.sh
index 0fa50ed..7fec3d0 100755
--- a/uefi-tools/uefi-build.sh
+++ b/uefi-tools/uefi-build.sh
@@ -12,6 +12,7 @@
 unset WORKSPACE EDK_TOOLS_DIR MAKEFLAGS
 
 TOOLS_DIR="`dirname $0`"
+export TOOLS_DIR
 . "$TOOLS_DIR"/common-functions
 PLATFORM_CONFIG=""
 VERBOSE=0
@@ -23,7 +24,7 @@
 # Number of threads to use for build
 export NUM_THREADS=$((`getconf _NPROCESSORS_ONLN` + 1))
 
-function build_platform
+function do_build
 {
 	PLATFORM_NAME="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $board get -o longname`"
 	PLATFORM_PREBUILD_CMDS="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $board get -o prebuild_cmds`"
@@ -31,9 +32,23 @@
 	PLATFORM_BUILDFLAGS="$PLATFORM_BUILDFLAGS ${EXTRA_OPTIONS[@]}"
 	PLATFORM_BUILDCMD="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $board get -o buildcmd`"
 	PLATFORM_DSC="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $board get -o dsc`"
-	PLATFORM_ARCH="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $board get -o arch`"
 	PLATFORM_PACKAGES_PATH="$PWD"
+	COMPONENT_INF="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $board get -o inf`"
 
+	PLATFORM_ARCH="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $board get -o arch`"
+	if [ -n "$PLATFORM_ARCH" ]; then
+		if [ -n "$DEFAULT_PLATFORM_ARCH" -a "$DEFAULT_PLATFORM_ARCH" != "$PLATFORM_ARCH" ]; then
+			echo "Command line specified architecture '$DEFAULT_PLATFORM_ARCH'" >&2
+			echo "differs from config file specified '$PLATFORM_ARCH'" >&2
+			return 1
+		fi
+	else
+		if [ ! -n "$DEFAULT_PLATFORM_ARCH" ]; then
+			echo "Unknown target architecture - aborting!" >&2
+			return 1
+		fi
+		PLATFORM_ARCH="$DEFAULT_PLATFORM_ARCH"
+	fi
 	TEMP_PACKAGES_PATH="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $board get -o packages_path`"
 	if [ -n "$TEMP_PACKAGES_PATH" ]; then
 		IFS=:
@@ -60,7 +75,18 @@
 		echo "PLATFORM_PACKAGES_PATH=$PLATFORM_PACKAGES_PATH"
 	fi
 
-	set_cross_compile
+	if [[ "${PLATFORM_BUILDFLAGS}" =~ "SECURE_BOOT_ENABLE=TRUE" ]]; then
+	    import_openssl
+	fi
+
+	if [ -n "$CROSS_COMPILE_64" -a "$PLATFORM_ARCH" == "AARCH64" ]; then
+		TEMP_CROSS_COMPILE="$CROSS_COMPILE_64"
+	elif [ -n "$CROSS_COMPILE_32" -a "$PLATFORM_ARCH" == "ARM" ]; then
+		TEMP_CROSS_COMPILE="$CROSS_COMPILE_32"
+	else
+		set_cross_compile
+	fi
+
 	CROSS_COMPILE="$TEMP_CROSS_COMPILE"
 
 	echo "Building $PLATFORM_NAME - $PLATFORM_ARCH"
@@ -73,12 +99,20 @@
 
 	case $TOOLCHAIN in
 		"gcc")
-			export TOOLCHAIN=`get_gcc_version "$CROSS_COMPILE"gcc`
+			TOOLCHAIN=`get_gcc_version "$CROSS_COMPILE"gcc`
+			if [ $? -ne 0 ]; then
+				echo "${CROSS_COMPILE}gcc not found!" >&2
+				return 1
+			fi
 			;;
 		"clang")
-			export TOOLCHAIN=`get_clang_version clang`
+			TOOLCHAIN=`get_clang_version clang`
+			if [ $? -ne 0 ]; then
+				return 1
+			fi
 			;;
 	esac
+	export TOOLCHAIN
 	echo "TOOLCHAIN is ${TOOLCHAIN}"
 
 	export ${TOOLCHAIN}_${PLATFORM_ARCH}_PREFIX=$CROSS_COMPILE
@@ -90,14 +124,17 @@
 			echo "Run pre build commands"
 			eval ${PLATFORM_PREBUILD_CMDS}
 		fi
-		if [ X"$PLATFORM_BUILDCMD" == X"" ]; then
-			echo  ${TOOLCHAIN}_${PLATFORM_ARCH}_PREFIX=$CROSS_COMPILE build -n $NUM_THREADS -a "$PLATFORM_ARCH" -t ${TOOLCHAIN} -p "$PLATFORM_DSC" -b "$target" \
-				${PLATFORM_BUILDFLAGS}
-			build -n $NUM_THREADS -a "$PLATFORM_ARCH" -t ${TOOLCHAIN} -p "$PLATFORM_DSC" -b "$target" \
-				${PLATFORM_BUILDFLAGS}
+
+		if [ -n "$COMPONENT_INF" ]; then
+			# Build a standalone component
+			build -n $NUM_THREADS -a "$PLATFORM_ARCH" -t ${TOOLCHAIN} -p "$PLATFORM_DSC" \
+				-m "$COMPONENT_INF" -b "$target" ${PLATFORM_BUILDFLAGS}
 		else
-			${PLATFORM_BUILDCMD} -b "$target" ${PLATFORM_BUILDFLAGS}
+			# Build a platform
+			build -n $NUM_THREADS -a "$PLATFORM_ARCH" -t ${TOOLCHAIN} -p "$PLATFORM_DSC" \
+				-b "$target" ${PLATFORM_BUILDFLAGS}
 		fi
+
 		RESULT=$?
 		if [ $RESULT -eq 0 ]; then
 			if [ X"$TOS_DIR" != X"" ]; then
@@ -127,6 +164,31 @@
 }
 
 
+function clearcache
+{
+  CONF_FILES="build_rule target tools_def"
+  if [ -z "$EDK_TOOLS_PATH" ]
+  then
+    TEMPLATE_PATH=./BaseTools/Conf/
+  else
+    TEMPLATE_PATH="$EDK_TOOLS_PATH/Conf/"
+  fi
+
+  for File in $CONF_FILES
+  do
+    TEMPLATE_FILE="$TEMPLATE_PATH/$File.template"
+    CACHE_FILE="Conf/$File.txt"
+    if [ -e "$CACHE_FILE" -a "$TEMPLATE_FILE" -nt "$CACHE_FILE" ]
+    then
+      echo "Removing outdated '$CACHE_FILE'."
+      rm "$CACHE_FILE"
+    fi
+  done
+
+  unset TEMPLATE_PATH TEMPLATE_FILE CACHE_FILE
+}
+
+
 function uefishell
 {
 	BUILD_ARCH=`uname -m`
@@ -142,11 +204,12 @@
 			;;
 	esac
 	export ARCH
+	export EDK_TOOLS_PATH=`pwd`/BaseTools
+	clearcache
+	. edksetup.sh BaseTools
 	if [ $VERBOSE -eq 1 ]; then
 		echo "Building BaseTools"
 	fi
-	export EDK_TOOLS_PATH=`pwd`/BaseTools
-	. edksetup.sh BaseTools
 	make -C $EDK_TOOLS_PATH
 	if [ $? -ne 0 ]; then
 		echo " !!! UEFI BaseTools failed to build !!! " >&2
@@ -187,7 +250,7 @@
 		fi
 		case "$FILE_ARG" in
 			/*)
-				PLATFORM_CONFIG="-c \"$FILE_ARG\""
+				PLATFORM_CONFIG="-c $FILE_ARG"
 			;;
 			*)
 				PLATFORM_CONFIG="-c `readlink -f \"$FILE_ARG\"`"
@@ -225,6 +288,10 @@
 			shift
 			ATF_DIR="$1"
 			;;
+		"-A" )
+			shift
+			DEFAULT_PLATFORM_ARCH="$1"
+			;;
 		"-c" )
 			# Already parsed above - skip this + option
 			shift
@@ -325,7 +392,7 @@
 fi
 
 for board in "${builds[@]}" ; do
-	build_platform
+	do_build
 done
 
 result_print
